import router from '@/router'
import ACCESS_ENUM from '@/access/AccessEnum.ts'
import { useLoginUserStore } from '@/stores/LoginUserStore.ts'
import checkAccess from '@/access/CheckAccess.ts'
import { message } from 'ant-design-vue'

/**
 * 路由守卫
 * 1.beforeEach：在路由跳转之前，先从Pinia中获取登录用户信息，如果没有登录，那么跳转到登录页面；
 *              如果登录了，那么判断是否具有访问该页面的权限，如果没有权限，那么跳转到无权限页面。
 */
router.beforeEach(async (to, from, next) => {
  // 从Pinia中获取登录用户信息
  const loginUserStore = useLoginUserStore();
  // 发送请求获取登录用户信息
  loginUserStore.fetchLoginUser();
  let loginUser = loginUserStore.loginUser;
  // 获取要跳转到的路由所需的权限
  const needAccess = (to.meta?.access as string) ?? ACCESS_ENUM.NOT_LOGIN
  // 要跳转的页面必须要登录
  if (needAccess !== ACCESS_ENUM.NOT_LOGIN) {
    // 如果没登录，跳转到登录页面
    if (!loginUser || !loginUser.userRole || loginUser.userRole === ACCESS_ENUM.NOT_LOGIN) {
      next(`/user/login?redirect=${to.fullPath}`)
      return
    }
    // 如果已经登录了，但是权限不足，那么跳转到无权限页面
    if (!checkAccess(loginUser, needAccess)) {
      message.error("无权限")
      next('/noAuth')
      return
    }
  }
  next()
})
